#ifndef _ASSIGN_
#define _ASSIGN_

#include "Statement.h"
#include "GeneralVariable.h"

class Assign: public Statement
{
public:
    Assign(TreeNode* iVariable, TreeNode* iExpression);
    virtual ~Assign();
    virtual void CheckVariables(set<string>& oVariables, string iParentName);
    virtual void CheckFunctionCalls(set<FunctionDefinition*>& iAllFunctions, string iParentName);
    virtual void CheckClassConstructions(set<ClassDefinition*>& iAllClasses, string iParentName);
    virtual void CheckExpressionTypes(map<string, ExpressionType*>& iVarTypes, string iParentName);
    virtual void Accept(GeneralVisitor* iVisitor);

    TreeNode* GetTarget()      { return fVariable;     }
    TreeNode* GetExpression()  { return fExpression;   }

private:
    TreeNode* fVariable;
    TreeNode* fExpression;
};

#endif
